package utils

import (
	"net"
	"strings"
)

// GetLocalIPv4Addresses 获取本机所有IPv4地址
func GetLocalIPv4Addresses() []string {
	var ips []string

	// 添加回环地址
	ips = append(ips, "127.0.0.1")

	// 获取所有网络接口
	interfaces, err := net.Interfaces()
	if err != nil {
		return ips
	}

	for _, iface := range interfaces {
		// 跳过非活动接口
		if iface.Flags&net.FlagUp == 0 {
			continue
		}

		// 获取接口地址
		addrs, err := iface.Addrs()
		if err != nil {
			continue
		}

		for _, addr := range addrs {
			ipNet, ok := addr.(*net.IPNet)
			if !ok {
				continue
			}

			// 只要IPv4地址
			if ipNet.IP.To4() != nil {
				ip := ipNet.IP.String()
				// 排除回环地址（已经添加过）
				if !strings.HasPrefix(ip, "127.") && !contains(ips, ip) {
					ips = append(ips, ip)
				}
			}
		}
	}

	return ips
}

// contains 检查切片中是否包含指定字符串
func contains(slice []string, str string) bool {
	for _, item := range slice {
		if item == str {
			return true
		}
	}
	return false
}
